package chapter_17;

/**
 * Created by Administrator on 2018/8/7.
 * 实例内部类
 */
public class Outer {

    // 外部类成员变量
    private int x = 10;

    // 外部类方法
    private void print() {
        System.out.println("调用外部方法...");
    }

    // 测试调用内部类
    public void test() {
        System.out.println("---------------外部类成员方法调用内部类成员方法---------------");
        Inner inner = new Inner();
        inner.display();
        System.out.println("---------------外部类成员方法调用内部类成员方法---------------");
    }

    // 内部类
    class Inner {
        // 内部成员变量
        private int x = 5;

        void display() {
            // 访问外部类的成员变量x
            System.out.println("外部类成员变量 x = " + Outer.this.x);

            // 访问内部类的成员变量x
            System.out.println("内部类成员变量 x = " + this.x);
            System.out.println("内部类成员变量 x = " + x);
            System.out.println("内部类成员变量 x = " + Inner.this.x);

            // 调用外部类的成员方法
            Outer.this.print();
            print();
        }
    }

    public static void main(String[] args) {

        // 通过外部类访问内部类
        Outer outer = new Outer();
        outer.test();

        // 直接访问内部类
        Inner inner = outer.new Inner();
        inner.display();
    }
}
